<?php
namespace backend\controllers;

use Yii;
use common\models\Storage;
use yii\helpers\BaseJson;
use common\models\Userfile;

/**
 * 文件存储管理
 *
 * @author jois
 */
class StorageController extends BaseController
{

    protected $path;

    protected $file_name;

    /**
     * 上传文件
     */
    public function actionUpload()
    {
        $this->path = '/common/uploads';
        if (empty($this->file_name)) {
            $this->file_name = $_FILES['file'];
        }
        // 取得上传的文件。
        $file = $this->file_name;
        // 取得文件的hash，文件路径与文件名。
        $hash = md5_file($file['tmp_name']);
        // 取得hash的文件。
        $storage = Storage::findOne($hash);
        // 如果文件不存在，则创建文件。
        if (is_null($storage)) {
            // 获取文件ID3信息。
            include dirname(Yii::$app->BasePath) . '/common/services/getID3/getid3.php';
            $getID = new \getID3();
            $info = $getID->analyze($file['tmp_name']);

            // 修复ID3库对不支持的文件格式的处理。
            if (! isset($info['mime_type'])) {
                $info['mime_type'] = mime_content_type($file['tmp_name']);
            }
            if (! isset($info['fileformat'])) {
                $extension = end(explode('.', $file['tmp_name']));
                $info['fileformat'] = $extension;
            }
            $info['filesize'] = filesize($file['tmp_name']);

            $filename = "{$hash}." . $info['fileformat'];
            // 存储的文件夹命名
            // $arr_tmp = str_split(md5(microtime(true)), 2);
            // $file_path = $arr_tmp[0] . '/' . $arr_tmp[1] . '/' . $arr_tmp[2] . '/';
            $file_path = date('Y') . date('m') . '/';

            // 保存文件信息
            $storage = new Storage();
            $storage->hash = $hash;
            $storage->parent_hash = '';
            $storage->filename = $file['name'];
            $storage->format = @$info['fileformat'] ?  : '';
            $storage->size = @$info['filesize'] ?  : 0;
            $storage->width = @$info['video']['resolution_x'] ?  : 0;
            $storage->height = @$info['video']['resolution_y'] ?  : 0;
            $storage->seconds = @$info['playtime_seconds'] ?  : 0;
            $storage->mime = @$info['mime_type'] ?  : '';
            $storage->path = '/' . $file_path . $filename;
            $storage->save();

            // 移动文件到存储目录
            if (! is_dir(dirname(Yii::$app->BasePath) . $this->path . '/' . $file_path)) {
                mkdir(dirname(Yii::$app->BasePath) . $this->path . '/' . $file_path);
            }
            move_uploaded_file($file['tmp_name'], dirname(Yii::$app->BasePath) . $this->path . '/' . $file_path . '/' . $hash . '.' . @$info['fileformat']);

            // 登陆后，用户文件关系记录
            if (! is_null(Yii::$app->session['userid'])) {
                $userfile = new Userfile();
                $userfile->user_id = Yii::$app->session['userid'];
                $userfile->storage_hash = $hash;
                $userfile->save();
            }
        }
        return BaseJson::encode($storage);
    }
}